import type { IIconMap } from './types'

/**
 * 菜单图标处理模块
 * 统一管理菜单和应用的图标映射
 */

/**
 * 分类图标映射
 */
const CATEGORY_ICON_MAP: IIconMap = {
  系统管理: 'gear',
  人事管理: 'staff',
  财务管理: 'wallet',
  办公管理: 'paperplane',
  业务管理: 'briefcase',
  数据管理: 'bars',
  权限管理: 'locked',
  日志管理: 'list',
  消息管理: 'chatbubble',
  文件管理: 'folder',
  活动管理: 'gift',
  访客管理: 'person'
}

/**
 * 应用图标映射
 */
const APP_ICON_MAP: IIconMap = {
  活动: 'gift',
  访客: 'person',
  人事: 'staff',
  员工: 'staff',
  财务: 'wallet',
  系统: 'gear',
  权限: 'locked',
  日志: 'list',
  消息: 'chatbubble',
  文件: 'folder',
  办公: 'paperplane',
  业务: 'briefcase',
  数据: 'bars',
  用户: 'person-filled',
  管理: 'gear'
}

/**
 * 默认图标列表
 */
const DEFAULT_ICONS = [
  'gear',
  'staff',
  'wallet',
  'paperplane',
  'briefcase',
  'bars',
  'locked',
  'list',
  'chatbubble',
  'folder',
  'gift',
  'person'
]

/**
 * menu页面专用的分类图标映射
 */
const MENU_CATEGORY_ICON_MAP: IIconMap = {
  系统管理: 'icon-gongwenbao',
  人事管理: 'icon-renyuanguanli',
  财务管理: 'icon-gongwenbao',
  办公管理: 'icon-zhifeiji',
  业务管理: 'icon-gongwenbao',
  数据管理: 'icon-shuben',
  权限管理: 'icon-lianxiren',
  日志管理: 'icon-shuben',
  消息管理: 'icon-xiazai16',
  文件管理: 'icon-shuben',
  活动管理: 'icon-huodongzhongxin',
  访客管理: 'icon-fangkeyuyue'
}

/**
 * menu页面专用的默认图标列表
 */
const MENU_DEFAULT_ICONS = [
  'icon-gongwenbao',
  'icon-renyuanguanli',
  'icon-zhifeiji',
  'icon-shuben',
  'icon-lianxiren',
  'icon-huodongzhongxin',
  'icon-fangkeyuyue',
  'icon-gongzuotai'
]

/**
 * 根据分类名称获取图标
 * @param categoryName 分类名称
 * @param index 分类索引（用于默认图标）
 * @returns 图标名称
 */
export const getIconForCategory = (categoryName: string, index: number): string => {
  // 根据分类名称匹配图标
  for (const [key, icon] of Object.entries(CATEGORY_ICON_MAP)) {
    if (categoryName.includes(key.replace('管理', ''))) {
      return icon
    }
  }

  // 返回默认图标
  return DEFAULT_ICONS[index % DEFAULT_ICONS.length]
}

/**
 * 根据应用名称获取图标
 * @param appName 应用名称
 * @returns 图标名称
 */
export const getAppIcon = (appName: string): string => {
  // 根据应用名称匹配图标
  for (const [key, icon] of Object.entries(APP_ICON_MAP)) {
    if (appName.includes(key)) {
      return icon
    }
  }

  return 'bars'
}

/**
 * 获取默认应用图标（通用版本）
 * @param index 索引
 * @returns 图标名称
 */
export const getDefaultAppIcon = (index: number): string => {
  return DEFAULT_ICONS[index % DEFAULT_ICONS.length]
}

/**
 * 获取menu页面专用的分类图标
 * @param categoryName 分类名称
 * @param index 分类索引（用于默认图标）
 * @returns 图标名称
 */
export const getMenuCategoryIcon = (categoryName: string, index: number): string => {
  // 根据分类名称匹配图标
  for (const [key, icon] of Object.entries(MENU_CATEGORY_ICON_MAP)) {
    if (categoryName.includes(key.replace('管理', ''))) {
      return icon
    }
  }

  // 返回默认图标
  return MENU_DEFAULT_ICONS[index % MENU_DEFAULT_ICONS.length]
}

/**
 * 获取menu页面专用的默认图标
 * @param index 索引
 * @returns 图标名称
 */
export const getMenuDefaultIcon = (index: number): string => {
  return MENU_DEFAULT_ICONS[index % MENU_DEFAULT_ICONS.length]
}

/**
 * 添加自定义图标映射
 * @param type 图标类型 ('category' | 'app')
 * @param key 关键词
 * @param icon 图标名称
 */
export const addIconMapping = (type: 'category' | 'app', key: string, icon: string): void => {
  if (type === 'category') {
    CATEGORY_ICON_MAP[key] = icon
  } else {
    APP_ICON_MAP[key] = icon
  }
}

/**
 * 获取所有图标映射配置
 * @returns 返回所有图标映射配置
 */
export const getAllIconMappings = () => {
  return {
    categoryIcons: { ...CATEGORY_ICON_MAP },
    appIcons: { ...APP_ICON_MAP },
    defaultIcons: [...DEFAULT_ICONS],
    menuDefaultIcons: [...MENU_DEFAULT_ICONS]
  }
}
